package com.sisgesbyte.services.proyeccion;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;
import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstProyeccion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.proyeccion.MantBandaProyeccionDao;
import com.sisgesbyte.dao.proyeccion.MantProyeccionClienteDao;
import com.sisgesbyte.dao.proyeccion.MantProyeccionClienteDetalleDao;
import com.sisgesbyte.dao.ventas.ConsultaVentasDao;
import com.sisgesbyte.dao.ventas.MantVendedorClienteDao;
import com.sisgesbyte.dao.ventas.MantenimientoClienteDao;
import com.sisgesbyte.data.entity.proyeccion.BandaProyeccionEntity;
import com.sisgesbyte.data.entity.proyeccion.ProyeccionClienteDetalleEntity;
import com.sisgesbyte.data.entity.proyeccion.ProyeccionClienteEntity;
import com.sisgesbyte.data.entity.ventas.ClienteEntity;
import com.sisgesbyte.data.entity.ventas.VendedorClienteEntity;
import com.sisgesbyte.data.entity.ventas.VentasEntity;
import com.sisgesbyte.services.proyeccion.bean.AvanceProyeccionClienteResponse;
import com.sisgesbyte.services.proyeccion.bean.AvanceProyeccionProductResponse;
import com.sisgesbyte.services.proyeccion.bean.AvanceVentaProductosBean;
import com.sisgesbyte.services.proyeccion.bean.FiltroProyClienteBean;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionClienteBean;
import com.sisgesbyte.services.ventas.MantenimientoFFVVService;
import com.sisgesbyte.services.ventas.bean.FFVVBean;
import com.sisgesbyte.services.ventas.bean.ListaFFVVJerarquiaResponse;

@Stateless
public class ProyeccionClienteServiceImpl implements ProyeccionClienteService {

	@EJB
	private MantVendedorClienteDao mantVendedorClienteDao;
	@EJB
	private MantenimientoFFVVService mantenimientoFFVVService;
	@EJB
	private ConsultaVentasDao consultaVentasDao;
	@EJB
	private MantProyeccionClienteDao mantProyeccionClienteDao;
	@EJB
	private MantenimientoClienteDao mantenimientoClienteDao;
	@EJB
	private MantBandaProyeccionDao mantBandaProyeccionDao;
	@EJB
	private MantProyeccionClienteDetalleDao mantProyeccionClienteDetalleDao;
	@Inject
	private Validaciones validaciones;

	@Override
	public AvanceProyeccionClienteResponse listaAvanceClientes(
			String codTransaccion, FiltroProyClienteBean filtros) {

		String mensajeTransaccionMetodo = "[listaAvanceClientes idTx="
				+ codTransaccion + "] - ";
		AvanceProyeccionClienteResponse response = new AvanceProyeccionClienteResponse();

		if (filtros.getIdPeriodo() < 1) {
			System.out.println(mensajeTransaccionMetodo
					+ "Debe seleccionar el Periodo");
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDF);
			return response;
		}

		try {
			ListaFFVVJerarquiaResponse listaFFVV = null;
			List<FFVVBean> listaJerarquiaFFVV = null;
			// validamos el idFFVV
			if (filtros.getIdFFVV() > 0) {

				try {
					// 1.- obtenemos la jerarquia de ffvv
					listaFFVV = mantenimientoFFVVService.listaJerarquiaFFVV(codTransaccion, filtros.getIdFFVV());
				} catch (Exception e) {
					System.out
							.println("Error al Obtener la lista de Jerarquia de FFVV "
									+ e.getMessage());
					response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
					response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT
							.replace("msj", mensajeTransaccionMetodo));
					return response;
				}

				if (listaFFVV.getCodigoRespuesta().equalsIgnoreCase(
						ConstantesInternasSistema.CODIGO_EXITO)) {
					listaJerarquiaFFVV = listaFFVV.getListaJerarquiaFFVV();
				}
			}

			List<VendedorClienteEntity> clientes = null;
			try {

				FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
				List<Object> valores = new ArrayList<>();
				List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();

				// filtro por zona
				if (filtros.getIdZona() > 0) {
					FiltrosBean listaZona = new FiltrosBean();
					List<String> campoZona = new ArrayList<String>();
					campoZona.add("cl.zona_id");
					listaZona.setCampos(campoZona);
					listaZona.setOperador("=");
					filtro.add(listaZona);
					valores.add(filtros.getIdZona());
				}
				// -------------------

				// filtro por canal
				if (filtros.getIdCanal() > 0) {
					FiltrosBean listaCanal = new FiltrosBean();
					List<String> campoCanal = new ArrayList<String>();
					campoCanal.add("c.categoria_cliente_id");
					listaCanal.setCampos(campoCanal);
					listaCanal.setOperador("=");
					filtro.add(listaCanal);
					valores.add(filtros.getIdCanal());
				}
				// -------------------
				// filtro por FFVV
				if (filtros.getIdFFVV() > 0) {
					FiltrosBean filtroFFVV = new FiltrosBean();
					List<String> campoFFVV = new ArrayList<String>();
					campoFFVV.add("cv.empleado_estructura_id");
					filtroFFVV.setCampos(campoFFVV);
					filtroFFVV.setOperador("in");
					filtroFFVV.setNumeroValores(listaJerarquiaFFVV.size());
					filtro.add(filtroFFVV);
					for (FFVVBean bean : listaJerarquiaFFVV) {
						valores.add(bean.getId());
					}
				}
				// -------------------
				filtroSQL.setListaFiltros(filtro);
				filtroSQL.setListaValores(valores);
				// 2.- Obtenemos la lista de clientes de cada fuerza de venta
				clientes = mantVendedorClienteDao.listaVendedorCliente(filtroSQL);
			} catch (Exception e) {
				System.out
						.println(mensajeTransaccionMetodo
								+ "Ocurrio un Error al tratar de obtener los clientes - "
								+ e);
				response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}

			List<ProyeccionClienteEntity> proyeccionCliente = null;
			try {
				FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
				List<Object> valores = new ArrayList<>();
				List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();
				FiltrosBean listaCanal = new FiltrosBean();
				List<String> campoCanal = new ArrayList<String>();
				campoCanal.add("periodo_id");
				listaCanal.setCampos(campoCanal);
				listaCanal.setOperador("=");
				filtro.add(listaCanal);
				valores.add(filtros.getIdPeriodo());
				filtroSQL.setListaFiltros(filtro);
				filtroSQL.setListaValores(valores);
				// 3.- obtenemos las proyecciones de clientes
				proyeccionCliente = mantProyeccionClienteDao.listaProyeccionClientes(filtroSQL);

			} catch (Exception e) {

			}

			List<VentasEntity> listaVentasPorZona = null;
			try {
				FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
				List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
				List<Object> valores = new ArrayList<Object>();

				// filtro para periodos
				FiltrosBean filtroPeriodo = new FiltrosBean();
				List<String> camposPeriodo = new ArrayList<String>();
				camposPeriodo.add("periodo_id");
				filtroPeriodo.setCampos(camposPeriodo);
				filtroPeriodo.setOperador("=");
				listaFiltros.add(filtroPeriodo);
				valores.add(filtros.getIdPeriodo());
				// ***** fin filtro periodos
				
				// filtro por zona
				if (filtros.getIdZona() > 0) {
					FiltrosBean listaZona = new FiltrosBean();
					List<String> campoZona = new ArrayList<String>();
					campoZona.add("zona_id");
					listaZona.setCampos(campoZona);
					listaZona.setOperador("=");
					listaFiltros.add(listaZona);
					valores.add(filtros.getIdZona());
				}
				// -------------------
				// filtro por canal
				if (filtros.getIdCanal() > 0) {
					FiltrosBean listaCanal = new FiltrosBean();
					List<String> campoCanal = new ArrayList<String>();
					campoCanal.add("categoria_cliente_id");
					listaCanal.setCampos(campoCanal);
					listaCanal.setOperador("=");
					listaFiltros.add(listaCanal);
					valores.add(filtros.getIdCanal());
				}
				// -------------------
				// filtro por FFVV
				if (filtros.getIdFFVV() > 0) {
					FiltrosBean filtroFFVV = new FiltrosBean();
					List<String> campoFFVV = new ArrayList<String>();
					campoFFVV.add("vendedor_id");
					filtroFFVV.setCampos(campoFFVV);
					filtroFFVV.setOperador("in");
					filtroFFVV.setNumeroValores(listaJerarquiaFFVV.size());
					listaFiltros.add(filtroFFVV);
					for (FFVVBean bean : listaJerarquiaFFVV) {
						valores.add(bean.getId());
					}
				}
				
				filtroSQL.setListaFiltros(listaFiltros);
				filtroSQL.setListaValores(valores);
				// 4.- capturamos la venta de los clientes x periodo , zona y canal
				listaVentasPorZona = consultaVentasDao.listaVentasDetalle(filtroSQL);

			} catch (Exception e) {
				System.out
						.println(mensajeTransaccionMetodo
								+ "Hubo un error en BD al lista de ventas por Cliente  "
								+ e);
				response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT);
				return response;
			}

			List<ClienteEntity> detalleCliente = null;
			try {

				FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
				List<Object> valores = new ArrayList<>();
				List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();
				if (filtros.getIdCanal() > 0) {
					// filtro por canal
					FiltrosBean listaCanal = new FiltrosBean();
					List<String> campoCanal = new ArrayList<String>();
					campoCanal.add("c.categoria_cliente_id");
					listaCanal.setCampos(campoCanal);
					listaCanal.setOperador("=");
					filtro.add(listaCanal);
					valores.add(filtros.getIdCanal());
				}
				// filtro cliente active
				FiltrosBean clienteActive = new FiltrosBean();
				List<String> campoActiveCliente = new ArrayList<String>();
				campoActiveCliente.add("c.active");
				clienteActive.setCampos(campoActiveCliente);
				clienteActive.setOperador("=");
				filtro.add(clienteActive);
				valores.add(true);

				// filtro local active
				FiltrosBean activeLocal = new FiltrosBean();
				List<String> campoLocal = new ArrayList<String>();
				campoLocal.add("cl.active");
				activeLocal.setCampos(campoLocal);
				activeLocal.setOperador("=");
				filtro.add(activeLocal);
				valores.add(true);

				filtroSQL.setListaFiltros(filtro);
				filtroSQL.setListaValores(valores);
				// 5.- obtenemos el detalle del cliente
				detalleCliente = mantenimientoClienteDao.listaClientes(filtroSQL);
			} catch (Exception e) {
				System.out.println(mensajeTransaccionMetodo
						+ "Hubo un error en BD al lista detalle de Cliente  "
						+ e.getMessage());
				response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT);
				return response;
			}

			List<ProyeccionClienteBean> listaAvanceCliente = new ArrayList<ProyeccionClienteBean>();
			for (VendedorClienteEntity clienteDao : clientes) {
				ProyeccionClienteBean bean = new ProyeccionClienteBean();

				// capturamos la proyeccion del cliente de la actividad 3
				BigDecimal proyeccionPeriodo = BigDecimal.ZERO;
				String colorBanda="";
				for (ProyeccionClienteEntity proy : proyeccionCliente) {
					if (proy.getCliente_id() == clienteDao.getCliente_id()
							&& proy.getCliente_local_id() == clienteDao.getCliente_locales_id()) {
						proyeccionPeriodo = proyeccionPeriodo.add(proy.getMonto_proyectada());
						colorBanda=proy.getCodigo_banda();
						bean.setId(proy.getId());
					}
				}
				
				//capturamos la venta del cliente de la actividad 4
				BigDecimal avanceVenta =BigDecimal.ZERO;
				for(VentasEntity venta : listaVentasPorZona){
					if(clienteDao.getCliente_id()==venta.getCliente_id() &&
						clienteDao.getCliente_locales_id()==venta.getCliente_locales_id()){
						avanceVenta =avanceVenta.add(venta.getTotal());
					}
				}
				
				BigDecimal porcentajeAvancePeriodo= BigDecimal.ZERO; 
				try{
					//calculamos el porcentaje de avance periodo
					porcentajeAvancePeriodo = avanceVenta.divide(proyeccionPeriodo,4, RoundingMode.CEILING);
				}catch(Exception e){
					System.out.println("Error al calcular porcentaje - "+e );
					porcentajeAvancePeriodo= BigDecimal.ZERO; 
				}
				
				for(ClienteEntity ls:detalleCliente){
					if(clienteDao.getCliente_id() == ls.getId_cliente() && 
					    clienteDao.getCliente_locales_id()==ls.getId_cliente_local()){
						bean.setRuc(validaciones.validarCamposString(ls.getNum_doc()));
						bean.setCodClienteLocal(validaciones.validarCamposString(ls.getCod_local()));
						bean.setRazonSocial(validaciones.validarCamposString(ls.getRazon_social()));
						break;
					}
				}
				
				String colorAvance ="";
				try{
					colorAvance = colorBanda(colorBanda,porcentajeAvancePeriodo,1);
				}catch(Exception e){
					System.out.println("Error al Obtener color de Avance");
				}
				
				bean.setColorBanda(colorAvance);
				bean.setIdCliente(clienteDao.getCliente_id());
				bean.setIdLocal(clienteDao.getCliente_locales_id());
				bean.setMontoAvance(avanceVenta);
				bean.setMontoProyectado(proyeccionPeriodo);
				bean.setPeriodo(filtros.getIdPeriodo());
				bean.setPorcentajeAvance(porcentajeAvancePeriodo.multiply(new BigDecimal(100)));
				
				listaAvanceCliente.add(bean);
			}
			response.setListaAvanceCliente(listaAvanceCliente);
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);

		} catch (Exception e) {
			System.out.println(mensajeTransaccionMetodo
					+ "Ocurrio un Error en el Proceso - " + e);
			response.setCodigoRespuesta(ConstProyeccion.PROYECCION_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstProyeccion.PROYECCION_LISTAR_MSJ_IDT
					.replace("msj", mensajeTransaccionMetodo));
			return response;
		}

		return response;
	}

	public String colorBanda(String codBanda,BigDecimal porcentaje, int tipoColor){
		String color ="";
			try{
				
			List<BandaProyeccionEntity> listaBandas = null;
			 try{
				 FiltrosSQLBean cadenaFiltros = new FiltrosSQLBean();
				 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
				 FiltrosBean filtroCampos = new FiltrosBean();
				 List<String> campos = new ArrayList<String>();
				 campos.add("codigo");
				 filtroCampos.setCampos(campos);
				 filtroCampos.setOperador("=");
				 listaFiltros.add(filtroCampos);
				 List<Object> valores = new ArrayList<Object>();
				 valores.add(codBanda);
				 cadenaFiltros.setListaFiltros(listaFiltros);
				 cadenaFiltros.setListaValores(valores);
				 listaBandas = mantBandaProyeccionDao.listaBandasProyeccion(cadenaFiltros);
			}catch(Exception e){
				System.out.println("Error al Obtener las bandas: " + e);
			}
			 List<BigDecimal> bandas = new ArrayList<BigDecimal>();
			 if(listaBandas.size() > 0 && listaBandas!= null){
				 BigDecimal suma = BigDecimal.ZERO;
				 for(BandaProyeccionEntity ls : listaBandas){
					 suma = suma.add(ls.getPorcentaje());
					 bandas.add(suma);
				 }
			 }
		
			int i=0;
			for(BigDecimal ls :bandas ){
				++i;
				if(porcentaje.compareTo(ls) == -1){
					break;
				}
			}
			
			if(tipoColor ==1){
				switch(i){
				case 1:
					color = "C84545";
					break;
				case 2:
					color = "CFF30A";
					break;
				case 3:
					color = "02F327";
					break;
				}
			}
			
			if(tipoColor ==2){
				switch(i){
				case 1:
					color = "rojo";
					break;
				case 2:
					color = "amarillo";
					break;
				case 3:
					color = "verde";
					break;
				}
			}
			
			}catch(Exception e){
				System.out.println("Error en el proceso para capturar el color de la Banda - " + e);
				color="";
			}
			return color;
		}

	@Override
	public AvanceProyeccionProductResponse avanceProductosCliente(
			String codTransaccion, FiltroProyClienteBean filtros) {
		
		String mensajeTransaccionMetodo = "[avanceProductosCliente idTx=" + codTransaccion + "] - ";
		AvanceProyeccionProductResponse response = new AvanceProyeccionProductResponse();
		
		if(filtros.getIdPeriodo() < 1 && filtros.getIdCliente() < 1){
			System.out.println(mensajeTransaccionMetodo+" Es necesario el codigo del periodo y el codigo de cliente");
			response.setIdTransaccion(codTransaccion);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		List<ProyeccionClienteDetalleEntity> proyeccionProductos = null;
		try{
			FiltrosSQLBean filtro = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			List<Object> valores = new ArrayList<Object>();
			//filtro por periodo
			FiltrosBean filtroPeriodo = new FiltrosBean();
			List<String> campoPeriodo = new ArrayList<String>();
			campoPeriodo.add("pc.periodo_id");
			filtroPeriodo.setCampos(campoPeriodo);
			filtroPeriodo.setOperador("=");
			listaFiltros.add(filtroPeriodo);
			valores.add(filtros.getIdPeriodo());
			
			if(filtros.getIdCliente() > 0){
				//filtro por ffvv
				FiltrosBean filtroFfvv = new FiltrosBean();
				List<String> campoFfvv = new ArrayList<String>();
				campoFfvv.add("pc.cliente_id");
				filtroFfvv.setCampos(campoFfvv);
				filtroFfvv.setOperador("=");
				listaFiltros.add(filtroFfvv);
				valores.add(filtros.getIdCliente());
			}

			filtro.setListaFiltros(listaFiltros);
			filtro.setListaValores(valores);
			//1.- consultamos la lista de proyeccion de productos de Cliente
			proyeccionProductos = mantProyeccionClienteDetalleDao.proyeccionClienteDetalle(filtro);
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al Tratar de obtener la proyeccion de los productos" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
				List<VentasEntity> ventasProducto =null;
				try{
					FiltrosSQLBean filtro = new FiltrosSQLBean();
					List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
					List<Object> valores = new ArrayList<Object>();
					//filtro por periodo
					FiltrosBean filtroPeriodo = new FiltrosBean();
					List<String> campoPeriodo = new ArrayList<String>();
					campoPeriodo.add("periodo_id");
					filtroPeriodo.setCampos(campoPeriodo);
					filtroPeriodo.setOperador("=");
					listaFiltros.add(filtroPeriodo);
					valores.add(filtros.getIdPeriodo());
					
					if(filtros.getIdCliente() > 0){
						//filtro por zona
						FiltrosBean filtroFfvv = new FiltrosBean();
						List<String> campoFfvv = new ArrayList<String>();
						campoFfvv.add("cliente_id");
						filtroFfvv.setCampos(campoFfvv);
						filtroFfvv.setOperador("=");
						listaFiltros.add(filtroFfvv);
					    valores.add(filtros.getIdCliente());	
					}
					
					filtro.setListaFiltros(listaFiltros);
					filtro.setListaValores(valores);
					filtro.setCampoOrden("producto_id");
					filtro.setTipoOrden("asc");
					//2.-obtenemos las ventas de los productos 
					ventasProducto =consultaVentasDao.listaVentasDetalle(filtro);
				}catch(Exception e){
					System.out.println(mensajeTransaccionMetodo + "Hubo un error al Tratar de obtener la ventas de los productos " +e.getMessage());
					response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				List<AvanceVentaProductosBean> listaProductos = new ArrayList<AvanceVentaProductosBean>();
				//recorremos las proyeccion de los productos
				for(ProyeccionClienteDetalleEntity proyeccion :proyeccionProductos){
					AvanceVentaProductosBean bean = new AvanceVentaProductosBean();
					
					BigDecimal avanceProducto = BigDecimal.ZERO;
					for(VentasEntity ventas : ventasProducto){
						//capturamos las ventas por el codigo de producto
						if(proyeccion.getProducto_id()==ventas.getProducto_id()){
							avanceProducto = avanceProducto.add(ventas.getCantidad());
						}
					}
					
					BigDecimal porcentajeAvancePeriodo= BigDecimal.ZERO; 
					try{
						//calculamos el porcentaje de avance periodo
						porcentajeAvancePeriodo = avanceProducto.divide(proyeccion.getCantidad_proyectada(),4, RoundingMode.CEILING);
					}catch(Exception e){
						System.out.println("Error al calcular porcentaje - "+e );
						porcentajeAvancePeriodo= BigDecimal.ZERO; 
					}
					
					String color = colorBanda(validaciones.validarCamposString(proyeccion.getCodigo_banda()), porcentajeAvancePeriodo,2);
					
					bean.setAvancePorcentaje(porcentajeAvancePeriodo.multiply(new BigDecimal(100)));
					bean.setAvanceProducto(avanceProducto);
					bean.setCategoriaProducto(proyeccion.getCategoria_producto());
					bean.setCategoriaProductoId(proyeccion.getCategoria_producto_id());
					bean.setColorBanda(color);
					bean.setCodProd(validaciones.validarCamposString(proyeccion.getCod_prod()));
					bean.setId(proyeccion.getId());
					bean.setMarca(validaciones.validarCamposString(proyeccion.getMarca()));
					bean.setMarcaId(proyeccion.getMarca_id());
					bean.setPeriodoId(proyeccion.getPeriodo_id());
					bean.setProducto(validaciones.validarCamposString(proyeccion.getProducto()));
					bean.setProductoId(proyeccion.getProducto_id());
					bean.setProyeccionProducto(proyeccion.getCantidad_proyectada());
					listaProductos.add(bean);
				}
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				response.setListaProductosZonas(listaProductos);
				return response;
	}
}
